home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1999 March
/
EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso
/
earcd
/
misc
/
pdflib
/
p_color.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-01-01
|
3KB
|
118 lines
/* p_color.c
* Copyright (C) 1997-98 Thomas Merz. All rights reserved.
*
* PDFlib color routines
*/
#include <stdio.h>
#include <math.h>
#include "p_intern.h"
/* Section 8.5 Color operators */
/* avoid wrong error messages due to rounding artifacts
* This doesn't do any harm since we truncate to 5 decimal places anyway
* when producing PDF output
*/
#define EPS 1.00001
void
PDF_setgray_fill(PDF *p, float g)
{
if (g < 0.0 || g > EPS ) {
pdf_error(p, PDF_WARN,
"Bogus gray value (%f) in PDF_setgray_fill - ignored!", g);
return;
}
pdf_end_text(p);
(void) fprintf(p->fp,"%s g\n", pdf_float(g));
}
void
PDF_setgray_stroke(PDF *p, float g)
{
if (g < 0.0 || g > EPS ) {
pdf_error(p, PDF_WARN,
"Bogus gray value (%f) in PDF_setgray_stroke - ignored!", g);
return;
}
pdf_end_text(p);
(void) fprintf(p->fp,"%s G\n", pdf_float(g));
}
void
PDF_setgray(PDF *p, float g)
{
if (g < 0.0 || g > EPS ) {
pdf_error(p, PDF_WARN,
"Bogus gray value (%f) in PDF_setgray - ignored!", g);
return;
}
pdf_end_text(p);
PDF_setgray_stroke(p, g);
PDF_setgray_fill(p, g);
}
void
PDF_setrgbcolor_fill(PDF *p, float red, float green, float blue)
{
if (red < 0.0 || red > EPS || green < 0.0 || green > EPS ||
blue < 0.0 || blue > EPS) {
pdf_error(p, PDF_WARN,
"Bogus color value (%f/%f/%f) in PDF_setrgbcolor_fill - ignored!",
red, green, blue);
return;
}
if (red == green && green == blue)
PDF_setgray_fill(p, red);
else {
pdf_end_text(p);
(void) fprintf(p->fp, "%s %s %s rg\n",
pdf_float(red), pdf_float(green), pdf_float(blue));
}
}
void
PDF_setrgbcolor_stroke(PDF *p, float red, float green, float blue)
{
if (red < 0.0 || red > EPS || green < 0.0 || green > EPS ||
blue < 0.0 || blue > EPS) {
pdf_error(p, PDF_WARN,
"Bogus color value (%f/%f/%f) in PDF_setrgbcolor_stroke - ignored!",
red, green, blue);
return;
}
if (red == green && green == blue)
PDF_setgray_stroke(p, red);
else {
(void) fprintf(p->fp, "%s %s %s RG\n",
pdf_float(red), pdf_float(green), pdf_float(blue));
pdf_end_text(p);
}
}
void
PDF_setrgbcolor(PDF *p, float red, float green, float blue)
{
if (red < 0.0 || red > EPS || green < 0.0 || green > EPS ||
blue < 0.0 || blue > EPS) {
pdf_error(p, PDF_WARN,
"Bogus color value (%f/%f/%f) in PDF_setrgbcolor - ignored!",
red, green, blue);
return;
}
if (red == green && green == blue)
PDF_setgray(p, red);
else {
PDF_setrgbcolor_fill(p, red, green, blue);
PDF_setrgbcolor_stroke(p, red, green, blue);
}
}